/*******************************************************************************
 * @file Copyright 2009 The CREATE Lab at CMU
 * 
 *       This file is part of JubJub, an open source project.
 *       http://code.google.com/p/jubjub/
 * 
 *       Redistribution and use in source and binary forms, with or without
 *       modification, are permitted provided that the following conditions are
 *       met:
 * 
 *       Redistributions of source code must retain the above copyright notice,
 *       this list of conditions and the following disclaimer.
 * 
 *       Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 * 
 *       Neither the name of Carnegie Mellon nor the names of its contributors
 *       may be used to endorse or promote products derived from this software
 *       without specific prior written permission.
 * 
 *       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *       "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *       LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 *       PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 *       HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *       SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *       LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *       DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *       THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *       (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 *       OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *******************************************************************************/

package edu.cmu.ri.createlab.jj.ui;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class JJRunProject implements Runnable
{
   private String name;
   private Process pr;
   public JJRunProject(String name)
   {
      this.name = name;
   }
   
   public void end()
   {
      pr.destroy();
   }

   
   public void run()
   {
      // TODO Auto-generated method stub
      try
      {
         pr = Runtime.getRuntime().exec("java -cp finch.jar;.;finch " + name);
//         pr = Runtime.getRuntime().exec("runDemo.bat");//("cmd /C java -cp finch.jar;.;finch " + name);
//         BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
//         BufferedReader err = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
//         
//         String line=null;
//         String line2=null;
//
//         while((line=input.readLine()) != null || (line2=err.readLine()) != null) {
//             if(line != null) System.out.println(line);
//             if(line2 != null) System.out.println(line2);
//         }

         StreamGobbler s1 = new StreamGobbler ("stdin", pr.getInputStream ());
         StreamGobbler s2 = new StreamGobbler ("sterr", pr.getErrorStream());
         s1.start();
         s2.start();

         int exitVal = pr.waitFor();
         System.out.println("Exited with error code "+exitVal);
      } catch (Exception e)
      {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      //System.exit(0);
   }
}

class StreamGobbler implements Runnable
{
   InputStream is;
   OutputStream os;
   String name;
   Thread thread;
   
   public StreamGobbler(String name, InputStream is)
   {
      this.name = name;
      this.is = is;
   }
   
   public void start () {
      thread = new Thread (this);
      thread.start ();
   }
   
   
   public void run()
   {
      // TODO Auto-generated method stub
      try 
      {
         System.out.println("Gobbler go");
         InputStreamReader isr = new InputStreamReader (is);
         BufferedReader br = new BufferedReader (isr);

         while (true) {
            String s = br.readLine ();
            if (s == null) break;
            System.out.println ("[" + name + "] " + s);
         }

         is.close ();

      } catch (Exception ex) 
      {
         System.out.println ("Problem reading stream " + name + "... :" + ex);
         ex.printStackTrace ();
      }
   }
   
}
